SQL - vyber neduplicitnich hodnot v jednom sloupci
Otázka od: Karel Pecinka
13. 10. 2004 11:23
Cau,
do databaze FB 1.5 si nactu data z jineho programu pres externi tabulku.
V tabulce jsou mj. sloupce ID_Skupiny, EAN a Nazev. Nektere zbozi je
zarazeno ve vice skupinach, tzn. ma pouze ruznou hodnotu ID_Skupiny a
vse ostatni ma stejne.
Potreboval bych pomoci SQL vybrat vsechno zbozi pouze jednou a k tomu
vzdy posledni ID_Skupiny. Teoreticky si to muzu i prekopirovat do jine
tabulky jestli to necemu pomuze. Lze toto nejak udelat pouze pomoci 1
nebo vice SQL?
Diky
Karel
Odpovedá: Martin Cajbik
13. 10. 2004 11:45
SELECT EAN, Nazev, ..., MAX(ID_Skupiny)
FROM Tabulka
GROUP BY EAN, Nazev, ...
Martin Cajbik
Karel Pecinka wrote:
> Cau,
>
> do databaze FB 1.5 si nactu data z jineho programu pres externi tabulku.
> V tabulce jsou mj. sloupce ID_Skupiny, EAN a Nazev. Nektere zbozi je
> zarazeno ve vice skupinach, tzn. ma pouze ruznou hodnotu ID_Skupiny a
> vse ostatni ma stejne.
>
> Potreboval bych pomoci SQL vybrat vsechno zbozi pouze jednou a k tomu
> vzdy posledni ID_Skupiny. Teoreticky si to muzu i prekopirovat do jine
> tabulky jestli to necemu pomuze. Lze toto nejak udelat pouze pomoci 1
> nebo vice SQL?
>
> Diky
>
> Karel
Odpovedá: Petr Brant
13. 10. 2004 11:53
Doufam, ze jsem to spravne pochopil. Delal jsem jednou neco podobneho,
situace byla takova, ze jsem mel v tabulce ID vozidla + dalsi udaje a hlavne
datum. Mel jsem najit vsechna vozidla u kterych neni vyplnena polozka
pic1name, ale jen ta, u kterych je nejvetsi datum. Udelal jsem ulozenou
proceduru (trochu jsem ji pro nazornost zde zjednodusil, ale princip je z
toho snad jasny)
RNDr. Petr Brant [brant@dcomm.cz]
http://brant.wz.cz
CREATE PROCEDURE GET_VEH_POSITIONS
RETURNS (
VEHID INTEGER,
POSTIME TIMESTAMP)
AS
declare variable Vehgroup integer;
declare variable pic1name varchar (256);
begin
vehgroup = -1;
for select vehid, postimestamp, pic1name
order by vehid, postimestamp descending into
:vehid, :postime, :pic1name
do
begin
if (vehgroup <> vehid) then /*neboli kdyz se meni ID vozidla*/
begin
vehgroup = :vehid;
if (:pic1name = '') then suspend; /*v aktivnim zaznamu je id vozu,
souradnice a max. datum*/
end
end
end
do databaze FB 1.5 si nactu data z jineho programu pres externi tabulku.
V tabulce jsou mj. sloupce ID_Skupiny, EAN a Nazev. Nektere zbozi je
zarazeno ve vice skupinach, tzn. ma pouze ruznou hodnotu ID_Skupiny a
vse ostatni ma stejne.
Potreboval bych pomoci SQL vybrat vsechno zbozi pouze jednou a k tomu
vzdy posledni ID_Skupiny. Teoreticky si to muzu i prekopirovat do jine
tabulky jestli to necemu pomuze. Lze toto nejak udelat pouze pomoci 1
nebo vice SQL?
Odpovedá: Jiri Cincura
13. 10. 2004 16:54
Karel Pecinka wrote:
> Cau,
>
> do databaze FB 1.5 si nactu data z jineho programu pres externi tabulku.
> V tabulce jsou mj. sloupce ID_Skupiny, EAN a Nazev. Nektere zbozi je
> zarazeno ve vice skupinach, tzn. ma pouze ruznou hodnotu ID_Skupiny a vse
> ostatni ma stejne.
>
A distinct by nepomohlo?
--
Jiri Cincura
e-mail: mailto:jiri@cincura.net; mailto:xcincura@informatics.muni.cz
ICQ: 314711544
web: http://www.cincura.net; http://photo.cincura.net
---
Nekdo vidi veci, ktere existuji, a pta se - proc?. Ja snim o vecech, ktere
nikdy neexistovaly a ptam se - proc ne? (Robert Kennedy)